package com.bowen.demo.demo004;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * <h3>java-study</h3>
 * <p>MapBL</p>
 * @author : zhang.bw
 * @date : 2021-03-22 12:30
 **/
public class MapBL {

	/**
	 * HashMap 遍历
	 * 大体上可以分为4类:
	 * 1,迭代器 (EntrySet、KeySet)
	 * 2，ForEach 遍历 （EntrySet、KeySet)
	 * 3，lambda 表达式遍历（lambda遍历）
	 * 4，StreamsApi 遍历（StreamsApi单线程、StreamsApi所线程）
	 */

	/**
	 * 迭代器 (EntrySet)
	 */
	public  static  void test1(){
		//创建Map 对象
		Map<Integer, String> map = new HashMap<>();
		//添加数据
		map.put(1,"我爱中国1");
		map.put(2,"我爱中国2");
		map.put(3,"我爱中国3");
		map.put(4,"我爱中国4");
		map.put(5,"我爱中国5");
		//遍历
		Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator();
		while (iterator.hasNext()){
			Map.Entry<Integer, String> next = iterator.next();
			System.out.println(next.getKey());
			System.out.println(next.getValue());
		}
	}

	/**
	 * 迭代器 (KeySet)
	 */
	public  static  void test2(){
		//创建Map 对象
		Map<Integer, String> map = new HashMap<>();
		//添加数据
		map.put(1,"我爱中国1");
		map.put(2,"我爱中国2");
		map.put(3,"我爱中国3");
		map.put(4,"我爱中国4");
		map.put(5,"我爱中国5");
		//遍历
		Iterator<Integer> iterator = map.keySet().iterator();
		while (iterator.hasNext()){
			Integer key = iterator.next();
			System.out.print(key);
			System.out.print(map.get(key));
		}

	}

	/**
	 * ForEach 遍历 （EntrySet)
	 */
	public  static  void test3(){
		//创建Map 对象
		Map<Integer, String> map = new HashMap<>();
		//添加数据
		map.put(1,"我爱中国1");
		map.put(2,"我爱中国2");
		map.put(3,"我爱中国3");
		map.put(4,"我爱中国4");
		map.put(5,"我爱中国5");

		//遍历
		for (Map.Entry<Integer,String> entry: map.entrySet()) {
			System.out.println("entry.getKey() = " + entry.getKey());
			System.out.println("entry.getValue() = " + entry.getValue());
		}

	}

	/**
	 * ForEach 遍历 （KeySet)
	 */
	public  static  void test4(){
		//创建Map 对象
		Map<Integer, String> map = new HashMap<>();
		//添加数据
		map.put(1,"我爱中国1");
		map.put(2,"我爱中国2");
		map.put(3,"我爱中国3");
		map.put(4,"我爱中国4");
		map.put(5,"我爱中国5");

		//遍历
		for (Integer key: map.keySet()) {
			System.out.println(key);
			System.out.println(map.get(key));
		}

	}

	/**
	 * lambda 表达式遍历（lambda遍历）
	 */
	public  static  void test5(){
		//创建Map 对象
		Map<Integer, String> map = new HashMap<>();
		//添加数据
		map.put(1,"我爱中国1");
		map.put(2,"我爱中国2");
		map.put(3,"我爱中国3");
		map.put(4,"我爱中国4");
		map.put(5,"我爱中国5");

		//遍历
		map.forEach((key,value) -> {
			System.out.print(key);
			System.out.print(value);
		});

	}

	/**
	 * treamsApi 遍历（StreamsApi单线程）
	 */
	public  static  void test6(){
		//创建Map 对象
		Map<Integer, String> map = new HashMap<>();
		//添加数据
		map.put(1,"我爱中国1");
		map.put(2,"我爱中国2");
		map.put(3,"我爱中国3");
		map.put(4,"我爱中国4");
		map.put(5,"我爱中国5");

		//遍历
		map.entrySet().stream().forEach((integerStringEntry -> {
			System.out.println(integerStringEntry.getKey());
			System.out.println(integerStringEntry.getValue());
		}));

	}

	/**
	 * treamsApi 遍历（StreamsApi所线程）
	 */
	public  static  void test7(){
		//创建Map 对象
		Map<Integer, String> map = new HashMap<>();
		//添加数据
		map.put(1,"我爱中国1");
		map.put(2,"我爱中国2");
		map.put(3,"我爱中国3");
		map.put(4,"我爱中国4");
		map.put(5,"我爱中国5");

		//遍历
		map.entrySet().parallelStream().forEach((integerStringEntry -> {
			System.out.println(integerStringEntry.getKey());
			System.out.println(integerStringEntry.getValue());

		}));

	}


	/**
	 * 测试
	 * @param args
	 */
	public static void main(String[] args) {
		MapBL.test1();
		MapBL.test2();
		MapBL.test3();
		MapBL.test4();
		MapBL.test5();
		MapBL.test6();
		MapBL.test7();
	}

}
